home *** CD-ROM | disk | FTP | other *** search
- ; ***************************************
- ; * Program: PRO-SET.ASM *
- ; * Purpose: To configure the IBM *
- ; * PROPRINTER to individual *
- ; * requirements *
- ; * Author: Fred Willshaw *
- ; * CIS 73075,321 *
- ; * Date: March 25, 1988 *
- ; * Version: 3.5 *
- ; ***************************************
-
- CODE SEGMENT PARA
-
- ORG 100H ;FOR EXE2BIN
-
- ASSUME CS:CODE,DS:NOTHING,ES:NOTHING
-
- PROSET: JMP START ;JUMP TO INSTALL
-
- ACTIVE_PRINTER DW 0
- ASCIIZ DB 128 DUP (0)
- BUFFER DB 264 DUP (' ')
- COLOR_1 DB 1FH
- COLOR_2 DB 9FH
- COLOR_3 DB 4FH
- COLOR_4 DB 2FH
- COLOR_5 DB 0AFH
- COLOR_6 DB 5FH
- COLOR_7 DB 0DFH
- COLOR_8 DB 3FH
- COLOR_REQUEST DB 'C'
- COLUMN DB 0
- CUR_COLOR_1 DB 0
- CUR_COLOR_2 DB 0
- FONTGEN_PREFIX DB 27,'=',198,4,20,33
- FONTREG_PREFIX DB 27,'=',15,0,20,0,0,0
- FONT_CHARACTER DB 248,160,160,142,129,1,6,1,1,14,0
- FONT_CTR DW 0
- FONT_TYPE DB 0
- FORMS_BUFFER DB ' '
- HANDLE DW 0
- INSERT DB ' '
- LINE DB 0
- LOAD_FLAG DB '½¼-'
- LOAD_MSG DB ' LOADING '
- KBFLAG DB 0CH
- KBOARD_VECTOR DD 0 ;OLD INT 09H ADDRESS
- MONO DB 'N'
- PRINTER_BASE DW 3 DUP (0)
- RESET_STRING DB 24 ;EMPTY BUFFER
- DB 18 ;CANCEL CONDENSED &
- ;SET 10 CPI
- DB 27,45,0 ;CANCEL UNDERSCORE
- DB 27,53,0 ;STOP AUTO LINEFEED
- DB 27,55 ;SELECT CHAR SET 1
- DB 27,61,0,0 ;CELAR DOWNLOAD BUFFER
- DB 27,65,12 ;6 LINES TO INCH
- DB 27,67,66 ;SET TO 66 LINES
- DB 27,67,0,11 ;SET TO 11 INCHES
- DB 27,70 ;CANCEL EMPHASIZED
- DB 27,72 ;CANCEL DBL STRIKE NLQ
- DB 27,73,0 ;STANDARD MODE
- DB 27,79 ;CANCEL AUTO PERF
- DB 27,82 ;CANCEL TABS
- DB 27,84 ;CANCEL SUBSCRIPT &
- ;SUPERSCRIPT
- DB 27,85,2 ;SET TO BIDIRECTIONAL
- DB 27,87,0 ;CANCEL DOUBLE WIDE
- DB 27,95,0 ;CANCEL OVERSCORE
- DB 0FFH ;END OF STRING
- RESIDENT DB 'R'
- RETURN_ADDRESS DB 132 DUP ('_')
- ROW DB 0
- SAVE_CUR_COL DB 0
- SAVE_CUR_END DB 0
- SAVE_CUR_ROW DB 0
- SAVE_CUR_START DB 0
- SAVE_MODE DB 0
- SAVE_MSG DB 'SAVE'
- SAVE_PAGE DB 0
- SAVE_SIZE DW 0
- SCAN_CODE DB 19H
- SCREEN_ADDRESS DW 0B800H
- SCREEN_BUFFER DW 8000 DUP (0)
- SOUND_STATUS DB 'Y'
- TYPEWRITER_BUFF DB 5280 DUP (' ')
- TYPEWRITER_MSG DB ' F1=PRINT F2=CLEAR <ESC> QUIT '
- DB ' LINE 00 COL 00'
- WINDOW_BUMP DW 0
- WINDOW_COLOR DB 0
- WINDOW_LINES DW 0
- WINDOW_NUMBER DW 0
- WINDOW_START DW 0
- WINDOW_WIDTH DW 0
-
- WINDOW_1 DB '╔═══IBM Proprinter Configuration Aid - Version 3.5═══╗'
- DB '║ ║'
- DB '║ [1] LPT1: [2] LPT2: [3] LPT3: ║'
- DB '║ ║'
- DB '║ [A] Set Condensed Mode [L] Format/Reset/Envelope ║'
- DB '║ [B] Stop Condensed Mode [M] 1/8" Spacing ║'
- DB '║ [C] Set 12 CPI [N] 7/72" Spacing ║'
- DB '║ [D] Set Emphasized Mode [O] Set Normal Quality ║'
- DB '║ [E] Stop Emphasized Mode [P] Set Normal Downloaded ║'
- DB '║ [F] ONE Direction Print --------NLQ MODES-------- ║'
- DB '║ [G] TWO Direction Print [Q] Set NLQ Normal ║'
- DB '║ [H] Set Double Wide [R] Set NLQ Downloaded ║'
- DB '║ [I] Stop Double Wide [S] Set NLQ Doublestrike ║'
- DB '║ [J] Character Set 1 [T] Stop NLQ Doublestrike ║'
- DB '║ [K] Character Set 2 [U] Font Processing ║'
- DB '║ [V] Typewriter Mode ║'
- DB '║ ║'
- DB '║ <ESC> Quit ║'
- DB '║ ║'
- DB '╚═══════════Fred Willshaw Software (c) 1988══════════╝'
-
- WINDOW_2 DB '╔═════Download Font Type═════╗'
- DB '║ ║'
- DB '║ Select Font File Type: ║'
- DB '║ ║'
- DB '║ 1 = FONTGEN Created ║'
- DB '║ 2 = IBM Format as shown ║'
- DB '║ in IBM Manual ║'
- DB '║ 3 = Create a Character ║'
- DB '║ ║'
- DB '║ <ESC> Quit ║'
- DB '║ ║'
- DB '╚════════════════════════════╝'
-
- WINDOW_3 DB '╔═════════Download Font File══════════╗'
- DB '║ ║'
- DB '║ Indicate File to Load: ║'
- DB '║ ║'
- DB '║ Drive: ║'
- DB '║ Path (include intermediate slashes) ║'
- DB '║ \__________________________________ ║'
- DB '║ ║'
- DB '║ File Name: ____________ ║'
- DB '║ ║'
- DB '║ <ESC> Quit ║'
- DB '╚═════════════════════════════════════╝'
-
- WINDOW_4 DB '╔════Format/Reset/Envelope═══╗'
- DB '║ ║'
- DB '║ [A] Reset Printer ║'
- DB '║ [B] Set Top of Form ║'
- DB '║ [C] Form Length (Inches) ║'
- DB '║ [D] Form Length (Lines) ║'
- DB '║ [E] Print an Envelope ║'
- DB '║ ║'
- DB '║ > < ║'
- DB '║ ║'
- DB '║ <ESC> Quit ║'
- DB '╚════════════════════════════╝'
-
- WINDOW_5 DB '╔════════════════════════════╗'
- DB '║ PRINTER NOT READY - Please ║'
- DB '║ correct problem and then ║'
- DB '║ depress the <ESC> key. ║'
- DB '╚════════════════════════════╝'
-
- WINDOW_6 DB '╔═══════════Return Address══════════╗'
- DB '║ ║'
- DB '║ _________________________________ ║'
- DB '║ _________________________________ ║'
- DB '║ _________________________________ ║'
- DB '║ _________________________________ ║'
- DB '║ ║'
- WINDOW_6A DB '║ <ESC> Quit ║'
- DB '╚═══════════════════════════════════╝'
-
- WINDOW_6B DB 'Return Address═'
- WINDOW_6C DB 'Mailing Address'
- WINDOW_6D DB 'End EACH line <ENTER>'
- WINDOW_6E DB 'F1=Standard F2=Legal'
-
- WINDOW_7 DB '╔══════════Create a Font══════════╗'
- DB '║ ┌───────────┐ ║'
- DB '║ │ │ Char Code = ___ ║'
- DB '║ │ │ Attribute = _ ║'
- DB '║ │ │ ║'
- DB '║ │ │ ',24,25,26,27,' move cursor ║'
- DB '║ │ │ <ENTER> On/Off ║'
- DB '║ │ │ F1 = Download ║'
- DB '║ │ │ F2 = Save to file ║'
- DB '║ │ │ F3 = Clear ║'
- DB '║ └───────────┘ ║'
- DB '║ <ESC> Quit ║'
- DB '╚═════════════════════════════════╝'
-
- WINDOW_TABLE DB 'A', 02, 27,15,00
- DW 0991, 1151, 0000, 0000, 0000, 0000
- DB 'B', 01, 18,00,00
- DW 1151, 0991, 1311, 0000, 0000, 0000
- DB 'C', 02, 27,58,00
- DW 1311, 0000, 0000, 0000, 0000, 0000
- DB 'D', 02, 27,69,00
- DW 1471, 1631, 0000, 0000, 0000, 0000
- DB 'E', 02, 27,70,00
- DW 1631, 1471, 0000, 0000, 0000, 0000
- DB 'F', 03, 27,85,01
- DW 1791, 1951, 0000, 0000, 0000, 0000
- DB 'G', 03, 27,85,00
- DW 1951, 1791, 0000, 0000, 0000, 0000
- DB 'H', 03, 27,87,01
- DW 2111, 2271, 0000, 0000, 0000, 0000
- DB 'I', 03, 27,87,00
- DW 2271, 2111, 0000, 0000, 0000, 0000
- DB 'J', 02, 27,55,00
- DW 2431, 2591, 0000, 0000, 0000, 0000
- DB 'K', 02, 27,54,02
- DW 2591, 2431, 0000, 0000, 0000, 0000
- DB 'M', 02, 27,48,00
- DW 1201, 1361, 0000, 0000, 0000, 0000
- DB 'N', 02, 27,49,00
- DW 1361, 1201, 0000, 0000, 0000, 0000
- DB 'O', 03, 27,73,00
- DW 1521, 1681, 2001, 2161, 2321, 2481
- DB 'P', 03, 27,73,04
- DW 1681, 1521, 2001, 2161, 2321, 2481
- DB 'Q', 03, 27,73,02
- DW 2001, 1521, 1681, 2161, 0000, 0000
- DB 'R', 03, 27,73,06
- DW 2161, 1521, 1681, 2001, 0000, 0000
- DB 'S', 02, 27,71,00
- DW 2321, 2481, 0000, 0000, 0000, 0000
- DB 'T', 02, 27,72,00
- DW 2481, 2321, 0000, 0000, 0000, 0000
- DB 'Z'
-
- KBOARD_HANDLER PROC FAR ;NEW INT 09H
- STI
- CLD
- PUSH AX
- PUSH DS
- MOV AX,40H
- MOV DS,AX
- IN AL,60H
- CMP AL,BYTE PTR CS:[SCAN_CODE] ;RIGHT KEY ?
- JNE KBOARD_RETURN
- MOV AL,BYTE PTR DS:[17H] ;GET KEY STATUS
- AND AL,BYTE PTR CS:[KBFLAG] ;RIGHT SHIFTS ON ?
- CMP AL,BYTE PTR CS:[KBFLAG]
- JNE KBOARD_RETURN
- IN AL,61H ;RESET KEYBOARD PORTS
- MOV AH,AL
- OR AL,80H
- OUT 61H,AL
- XCHG AH,AL
- OUT 61H,AL
- CLI
- MOV AL,20H ;SIGNAL EOI
- OUT 20H,AL
- POP DS
- POP AX
- JMP KBOARD_MATCH
-
- KBOARD_RETURN: POP DS ;JUMP TO OLD INTERRUPT
- POP AX
- JMP DWORD PTR CS:[KBOARD_VECTOR]
-
- KBOARD_MATCH: STI ;LET INTERRUPTS BEGIN
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH DI
- PUSH SI
- PUSH DS
- PUSH ES
-
- MOV AX,CS
- MOV ES,AX
-
- MOV AX,40H ;GET LPT1-3 ADDRESSES
- MOV DS,AX
- LEA DI,PRINTER_BASE
- MOV SI,8
- MOV CX,3
- REP MOVSW
-
- MOV AX,CS
- MOV DS,AX
-
- MOV AX,PRINTER_BASE ;DEFAULT TO LPT1:
- MOV ACTIVE_PRINTER,AX
-
- MOV AH,0FH ;GET VIDEO MODE
- INT 10H
- MOV SAVE_PAGE,BH
- MOV SAVE_MODE,AL
-
- MOV AH,3 ;GET CURSOR LOCATION
- MOV BH,SAVE_PAGE
- INT 10H
- MOV SAVE_CUR_ROW,DH
- MOV SAVE_CUR_COL,DL
-
- CMP SAVE_MODE,7
- JNE CURSOR_OKAY
- CMP CX,0607H ;VALID CURSOR MODE
- JNE CURSOR_OKAY ;FOR MONOCHROME ?
- MOV CX,0B0CH
-
- CURSOR_OKAY: MOV SAVE_CUR_START,CH
- MOV SAVE_CUR_END,CL
-
- MOV AL,SAVE_MODE
- CMP AL,7
- JE MONO_VIDEO
- CMP AH,40 ;40 COLUMN SCREEN
- JNE COLOR_SCREEN
- CALL BEEP
- JMP KBOARD_FINISH
-
- COLOR_SCREEN: MOV MONO,'N' ;SET AS C/G ADAPTER
- CMP SAVE_MODE,8 ;SEE IF PCJR OR
- ;EGA ADAPTER
- JL CS_005 ;IF IT IS NO V_TRACE
- MOV MONO,'Y' ;WAITING
- CS_005: MOV SCREEN_ADDRESS,0B800H
- CMP COLOR_REQUEST,'M'
- JE CS_010
- MOV COLOR_1,1FH
- CS_010: MOV COLOR_2,9FH
- MOV SAVE_SIZE,25
- CMP SAVE_MODE,4
- JB SCREEN_SET
- MOV SAVE_SIZE,100
- JMP SCREEN_SET
-
- MONO_VIDEO: MOV MONO,'Y' ;SET AS MONOCHROME
- MOV SCREEN_ADDRESS,0B000H
- MOV COLOR_1,07H
- MOV COLOR_2,0F0H
- MOV SAVE_SIZE,25
-
- SCREEN_SET: MOV CX,SAVE_SIZE
- MOV AX,SCREEN_ADDRESS
- MOV DS,AX
- MOV SI,0
- LEA DI,SCREEN_BUFFER
-
- SAVE_WINDOW: PUSH CX ;STORE CURRENT SCREEN
- MOV CX,80
- CALL V_TRACE
- REP MOVSW
- POP CX
- LOOP SAVE_WINDOW
-
- MOV AX,CS
- MOV DS,AX
- CMP SAVE_MODE,7 ;MUST SCREEN BE RESET
- JE SCREEN_OKAY_1
- CMP SAVE_MODE,4
- JB SCREEN_OKAY_1
- MOV AH,0 ;GRAPHICS SCREEN
- MOV AL,3 ;MUST RESET
- INT 10H
-
- SCREEN_OKAY_1: MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- MOV AX,CS
- MOV DS,AX
- MOV AH,2 ;MOVE CURSOR TO 0,0
- MOV DH,0
- MOV DL,0
- MOV BH,SAVE_PAGE
- INT 10H
- CALL DISPLAY_WIN_1
-
- GET_REQUEST: MOV AH,00H ;MAIN PROGRAM LOOP
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE NOT_ESCAPE
- JMP LEAVE_PROGRAM
-
- NOT_ESCAPE: CMP AL,'1' ;PRINTER CHANGE ?
- JB START_CHECK
- CMP AL,'3'
- JA START_CHECK
- CALL CHANGE_PRINTER
- JMP GET_REQUEST
-
- START_CHECK: LEA SI,WINDOW_TABLE ;CHECK VALID LETTER
- CMP AL,'a'
- JB CHECK_FONT
- CMP AL,'z'
- JA BAD_REQUEST
- SUB AL,' '
-
- CHECK_FONT: CMP AL,'U' ;FONT DOWNLOAD REQUEST
- JNE CHECK_FORMAT
- JMP FONT_REQUEST
-
- CHECK_FORMAT: CMP AL,'L' ;PAGE FORMAT/RESET
- JNE CHECK_TWRITER
- CALL PAGE_FORMAT
- JMP GET_REQUEST
-
- CHECK_TWRITER: CMP AL,'V' ;TYPEWRITER MODE
- JNE CHECK_LETTER
- CALL TYPEWRITER
- JMP GET_REQUEST
-
- CHECK_LETTER: CMP AL,'A' ;VALID TABLE LETTER ?
- JB BAD_REQUEST
- CMP AL,'T'
- JA BAD_REQUEST
-
- CHECK_TABLE: MOV DL,DS:[SI] ;MATCH TABLE
- CMP DL,'Z'
- JNE NOT_TABLE_END
-
- BAD_REQUEST: CALL BEEP ;LETTER NOT FOUND
- JMP GET_REQUEST
-
- NOT_TABLE_END: CMP AL,DL ;IS IT A MATCH ?
- JNE TABLE_NO_MATCH
- MOV CH,0 ;YES - SEND STRING
- MOV CL,BYTE PTR DS:[SI+1]
- ADD SI,2
- CALL SEND_PRINTER
- JMP GET_REQUEST
-
- TABLE_NO_MATCH: ADD SI,17 ;NO - LOOK SOMEMORE
- JMP CHECK_TABLE
-
- LEAVE_PROGRAM: MOV AX,CS ;ALL DONE - RESET
- MOV DS,AX ;PATH AND CURSOR
- CMP SAVE_MODE,7
- JE SCREEN_OKAY_2
- CMP SAVE_MODE,4
- JB SCREEN_OKAY_2
-
- MOV AH,0
- MOV AL,SAVE_MODE
- INT 10H
-
- SCREEN_OKAY_2: MOV AH,5 ;RESTORE PAGE #
- MOV AL,SAVE_PAGE
- INT 10H
-
- MOV AH,2 ;RESTORE CURSOR
- MOV DH,SAVE_CUR_ROW
- MOV DL,SAVE_CUR_COL
- MOV BH,SAVE_PAGE
- INT 10H
-
- MOV AH,1 ;RESTORE CURSOR PARM
- MOV CH,SAVE_CUR_START
- MOV CL,SAVE_CUR_END
- INT 10H
-
- MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- LEA SI,SCREEN_BUFFER
- MOV DI,0
- MOV CX,SAVE_SIZE
-
- SCREEN_RESTORE: PUSH CX ;RELOAD OLD SCREEN
- MOV CX,80
- CALL V_TRACE
- REP MOVSW
- POP CX
- LOOP SCREEN_RESTORE
-
- KBOARD_FINISH: POP ES
- POP DS
- POP SI
- POP DI
- POP DX
- POP CX
- POP BX
- POP AX
-
- CMP BYTE PTR CS:[RESIDENT],'R'
- JE DO_IRET
- RET ;BACK TO DOS
-
- DO_IRET: IRET ;BACK TO CALLER
-
- KBOARD_HANDLER ENDP
-
- BACKSPACE PROC NEAR
- DEC DI ;MOVE BACK 1 POS
- DEC DI
- MOV AL,'_'
- MOV ES:[DI],AL ;BLANK IT
- MOV AH,CUR_COLOR_1
- MOV ES:[DI+3],AH ;REMOVE FLASH
- MOV AH,CUR_COLOR_2
- MOV ES:[DI+1],AH ;SET FLASH
- DEC CX ;CHANGE CHAR COUNT
- DEC SI
- MOV AL,' '
- MOV DS:[SI],AL ;BLANK MEMORY NAME
- RET
- BACKSPACE ENDP
-
- BEEP PROC NEAR
- CMP SOUND_STATUS,'N'
- JE BP_020
- PUSH AX
- PUSH CX
- PUSH DX
- MOV DX,300
- IN AL,61H
- AND AL,0FEH
- BP_005: OR AL,2
- OUT 61H,AL
- MOV CX,233
- BP_010: LOOP BP_010
- AND AL,0FDH
- OUT 61H,AL
- MOV CX,233
- BP_015: LOOP BP_015
- DEC DX
- JNZ BP_005
- POP DX
- POP CX
- POP AX
- BP_020: RET
- BEEP ENDP
-
- CURSOR_ON PROC NEAR
- CMP COLUMN,11
- JL CO_005
- MOV COLUMN,0
- INC ROW
- CO_005: CMP ROW,8
- JL CO_010
- MOV ROW,0
- CO_010: CMP COLUMN,-1
- JG CO_015
- DEC ROW
- MOV COLUMN,10
- CO_015: CMP ROW,-1
- JG CO_020
- MOV ROW,7
- CO_020: MOV AH,2
- MOV DH,ROW
- ADD DH,7
- MOV DL,COLUMN
- ADD DL,27
- MOV BH,0
- INT 10H
- RET
- CURSOR_ON ENDP
-
- CHANGE_PRINTER PROC NEAR
- SUB AL,'1'
- PUSH AX
- PUSH AX
- MOV AH,0
- MOV DX,AX
- CP_005: MOV AH,02H
- INT 17H
- TEST AH,00101001B ;PRINTER AVAILABLE ?
- JZ CP_010 ;YES
- CALL BEEP ;NO
- MOV WINDOW_BUMP,100
- MOV AL,COLOR_8
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,5
- MOV AX,OFFSET WINDOW_5 ;PRINTER NOT READY
- MOV WINDOW_NUMBER,AX
- MOV WINDOW_START,1332
- MOV WINDOW_WIDTH,30
- CALL DISPLAY_WINDOW
- MOV AH,0
- INT 16H
- PUSH AX
- CALL DISPLAY_WIN_1
- POP AX
- CMP AH,01H
- JNE CP_005
- POP AX
- POP AX
- RET
-
- CP_010: POP AX
- MOV AH,0 ;GET PRINTER ADDRESS
- MOV DL,2
- MUL DL
- MOV BX,OFFSET PRINTER_BASE
- ADD BX,AX
- MOV AX,[BX]
- MOV ACTIVE_PRINTER,AX
- MOV AH,COLOR_1
- CALL V_TRACE
- MOV BYTE PTR ES:[685],AH
- MOV BYTE PTR ES:[711],AH
- MOV BYTE PTR ES:[737],AH
- POP AX
- MOV DI,685
- CMP AL,1
- JB CP_015
- MOV DI,711
- CMP AL,2
- JB CP_015
- MOV DI,737
- CP_015: MOV AL,COLOR_2
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- RET
- CHANGE_PRINTER ENDP
-
- DISPLAY_WINDOW PROC NEAR
- MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- MOV BX,WINDOW_NUMBER
- MOV DI,WINDOW_START
- MOV AH,WINDOW_COLOR
- MOV CX,WINDOW_LINES
- DW_005: PUSH CX
- MOV CX,WINDOW_WIDTH
- CALL V_TRACE
- DW_010: MOV AL,DS:[BX]
- MOV ES:[DI],AL
- INC BX
- INC DI
- MOV ES:[DI],AH
- INC DI
- LOOP DW_010
- POP CX
- ADD DI,WINDOW_BUMP
- LOOP DW_005
- RET
- DISPLAY_WINDOW ENDP
-
- DISPLAY_WIN_1 PROC NEAR
- MOV WINDOW_BUMP,52 ;SHOW PRIMARY MENU
- MOV AL,COLOR_1
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,20
- MOV AX,OFFSET WINDOW_1
- MOV WINDOW_NUMBER,AX
- MOV WINDOW_START,344
- MOV WINDOW_WIDTH,54
- CALL DISPLAY_WINDOW
- RET
- DISPLAY_WIN_1 ENDP
-
- ENVELOPE PROC NEAR
- PUSH ES
- PUSH DS
- PUSH SI
- PUSH DI
- MOV AX,CS
- MOV DS,AX
- MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- EN_005: MOV AH,0
- INT 16H
- CMP AL,0 ;INVALID CHARACTER
- JE EN_015
- CMP AL,27 ;ESCAPE
- JNE EN_010
- POP DI
- POP SI
- JMP EN_035
- EN_010: CMP AL,08H ;BACKSPACE
- JNE EN_020
- CMP CX,0 ;ALREADY AT POS 1
- JE EN_015
- CALL BACKSPACE
- JMP EN_005
- EN_015: CALL BEEP
- JMP EN_005
- EN_020: CMP AL,0DH ;ENTER
- JNE EN_025
- MOV AL,CUR_COLOR_1
- CALL V_TRACE
- MOV BYTE PTR ES:[DI+1],AL
- POP DI
- POP SI
- MOV AH,0
- CMP LINE,4
- JE EN_035
- ADD DI,160
- ADD SI,33
- MOV AL,CUR_COLOR_2
- CALL V_TRACE
- MOV BYTE PTR ES:[DI+1],AL
- PUSH SI
- PUSH DI
- MOV CX,0
- INC LINE
- JMP EN_005
- EN_025: CMP CX,33
- JB EN_030
- JMP EN_015
- EN_030: CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL ;SAVE/DISPLAY CHAR
- MOV BYTE PTR DS:[SI],AL
- MOV AL,CUR_COLOR_1
- MOV BYTE PTR ES:[DI+1],AL
- ADD DI,2
- MOV AL,CUR_COLOR_2
- MOV BYTE PTR ES:[DI+1],AL
- INC SI
- INC CX
- JMP EN_005
- EN_035: POP DS
- POP ES
- RET
- ENVELOPE ENDP
-
- FONT_REQUEST PROC NEAR
- MOV AX,CS
- MOV DS,AX
- MOV ES,AX
- LEA DI,ASCIIZ ;BLANK SEARCH HANDLE
- MOV AL,00H
- MOV CX,128
- REP STOSB
-
- MOV WINDOW_BUMP,100
- MOV AL,COLOR_3
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,12
- LEA SI,WINDOW_2
- MOV WINDOW_NUMBER,SI
- MOV WINDOW_START,516
- MOV WINDOW_WIDTH,30
- CALL DISPLAY_WINDOW
-
- FR_005: MOV AX,CS
- MOV DS,AX
- MOV AH,0
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE FR_010
- JMP FR_070
-
- FR_010: CMP AL,'1' ;FONTGEN CREATED
- JE FR_020
- CMP AL,'2' ;IBM STANDARD
- JE FR_020
- CMP AL,'3' ;CREATE A CHARACTER
- JNE FR_015
- JMP FR_075
- FR_015: CALL BEEP ;ERROR
- JMP FR_005
-
- FR_020: MOV FONT_TYPE,AL
- PUSH ES
- MOV AX,CS
- MOV ES,AX
- LEA SI,LOAD_MSG+2
- LEA DI,WINDOW_3+103
- MOV CX,4
- REP MOVSB
- POP ES
- CALL GET_DSN
- CMP AH,0
- JE FR_025
- JMP FR_070
-
- FR_025: MOV AX,CS
- MOV DS,AX
- MOV ES,AX
-
- MOV AH,3DH ;OPEN FONT FILE
- MOV AL,00H
- LEA DX,ASCIIZ
- CLC
- INT 21H
- JNC FR_030
- JMP FR_065
- FR_030: MOV HANDLE,AX ;SAVE HANDLE
-
- FR_035: MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- LEA SI,LOAD_MSG ;SHOW LOADING
- MOV DI,2478
- MOV CX,10
- MOV AH,COLOR_2
- CALL V_TRACE
- FR_040: MOV AL,DS:[SI]
- MOV ES:[DI],AL
- MOV ES:[DI+1],AH
- INC SI
- INC DI
- INC DI
- LOOP FR_040
-
- MOV AX,CS
- MOV ES,AX
- CMP FONT_TYPE,'2' ;IS IT IBM FORMAT ?
- JE FR_050
- LEA SI,FONTGEN_PREFIX ;SEND PREFIX
- MOV CX,6
- FR_045: MOV AL,DS:[SI]
- CALL PRINTER_PORT
- INC SI
- LOOP FR_045
- FR_050: MOV FONT_CTR,11 ;COUNTER FOR FONTGEN
- FR_055: CMP FONT_TYPE,'2' ;IBM FORMAT ?
- JE FR_060
- INC FONT_CTR
- CMP FONT_CTR,12
- JB FR_060
- MOV AL,0
- CALL PRINTER_PORT
- MOV FONT_CTR,0
-
- FR_060: MOV CX,1 ;READ FONT FILE
- MOV BX,HANDLE
- LEA DX,BUFFER
- MOV AH,3FH
- INT 21H
- CMP AX,0
- JE FR_070
- MOV SI,DX
- MOV AL,BYTE PTR DS:[SI]
- CALL PRINTER_PORT
- JMP FR_055
-
- FR_065: CALL BEEP
- JMP FONT_REQUEST
-
- FR_070: MOV AH,3EH ;CLOSE FONT FILE
- INT 21H
-
- MOV AX,CS
- MOV DS,AX
- CALL DISPLAY_WIN_1
-
- JMP GET_REQUEST
-
- FR_075: MOV WINDOW_BUMP,90
- MOV AL,COLOR_6
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,13
- LEA SI,WINDOW_7
- MOV WINDOW_NUMBER,SI
- MOV WINDOW_START,848
- MOV WINDOW_WIDTH,35
- CALL DISPLAY_WINDOW
-
- LEA SI,FONT_CHARACTER
- MOV DI,1174
- MOV CX,11
- FR_080: PUSH CX
- PUSH DI
- MOV BL,10000000B
- MOV CX,8
- CALL V_TRACE
- FR_085: MOV AL,BYTE PTR DS:[SI]
- AND AL,BL
- CMP AL,BL
- JNE FR_090
- MOV AL,9
- MOV BYTE PTR ES:[DI],AL
- FR_090: SHR BL,1
- ADD DI,160
- LOOP FR_085
- POP DI
- POP CX
- ADD DI,2
- INC SI
- LOOP FR_080
-
- FR_095: MOV AL,'_'
- MOV AH,COLOR_7
- CALL V_TRACE
- MOV BYTE PTR ES:[1224],AL
- MOV BYTE PTR ES:[1226],AL
- MOV BYTE PTR ES:[1228],AL
- MOV BYTE PTR ES:[1225],AH
- MOV DI,1224
- MOV SI,OFFSET FORMS_BUFFER
- MOV CX,0
- FR_100: MOV AH,0
- INT 16H
- CMP AL,08H
- JNE FR_105
- CMP CX,0
- JE FR_120
- MOV AL,COLOR_6
- MOV CUR_COLOR_1,AL
- MOV AL,COLOR_7
- MOV CUR_COLOR_2,AL
- CALL BACKSPACE
- JMP FR_100
- FR_105: CMP AH,01H
- JNE FR_110
- JMP FR_235
- FR_110: CMP AL,0DH
- JNE FR_115
- JMP FR_135
- FR_115: CMP AL,'0'
- JB FR_120
- CMP AL,'9'
- JA FR_120
- JMP FR_130
- FR_120: CMP AH,3DH
- JNE FR_125
- JMP FR_280
- FR_125: CALL BEEP
- JMP FR_100
- FR_130: MOV AH,COLOR_6
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- MOV BYTE PTR DS:[SI],AL
- MOV BYTE PTR ES:[DI+1],AH
- ADD DI,2
- INC SI
- INC CX
- CMP CX,3
- JE FR_135
- JMP FR_100
- FR_135: MOV AX,0
- MOV SI,OFFSET FORMS_BUFFER
- CMP CX,3
- JB FR_140
- MOV DL,100
- MOV AL,CS:[SI]
- SUB AL,'0'
- MUL DL
- INC SI
- FR_140: PUSH AX
- CMP CX,2
- JB FR_145
- MOV DL,10
- MOV AL,CS:[SI]
- SUB AL,'0'
- MUL DL
- XCHG AX,BX
- POP AX
- ADD AX,BX
- PUSH AX
- INC SI
- FR_145: POP AX
- MOV BH,0
- MOV BL,CS:[SI]
- SUB BL,'0'
- ADD AX,BX
- CMP AX,127
- JB FR_150
- CALL BEEP
- JMP FR_095
- FR_150: CMP AX,32
- JA FR_155
- CALL BEEP
- JMP FR_095
- FR_155: LEA SI,FONTREG_PREFIX+5
- MOV BYTE PTR DS:[SI],AL
- MOV AH,COLOR_7
- CALL V_TRACE
- MOV BYTE PTR ES:[1385],AH
- MOV AH,0
- INT 16H
- CMP AL,'0'
- JE FR_165
- CMP AL,'1'
- JE FR_165
- CMP AH,01H
- JNE FR_160
- JMP FR_235
- FR_160: CALL BEEP
- JMP FR_155
- FR_165: MOV AH,COLOR_6
- CALL V_TRACE
- MOV BYTE PTR ES:[1384],AL
- MOV BYTE PTR ES:[1385],AH
- SUB AL,'0'
- CMP AL,0
- JE FR_167
- MOV AL,128
- FR_167: LEA SI,FONTREG_PREFIX+6
- MOV BYTE PTR DS:[SI],AL
-
- MOV COLUMN,0
- MOV ROW,0
- CALL CURSOR_ON
-
- FR_170: MOV AH,0
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE FR_175
- JMP FR_230
- FR_175: CMP AH,4DH ;RIGHT ARROW
- JE FR_195
- CMP AH,4BH ;LEFT ARROW
- JE FR_200
- CMP AH,48H ;UP ARROW
- JE FR_205
- CMP AH,50H ;DOWN ARROW
- JE FR_210
- CMP AL,0DH ;ENTER
- JE FR_215
- CMP AH,3CH ;SAVE
- JNE FR_180
- JMP FR_240
- FR_180: CMP AH,3BH ;DOWNLOAD
- JNE FR_185
- JMP FR_265
- FR_185: CMP AH,3DH ;CLEAR
- JNE FR_190
- JMP FR_280
- FR_190: CALL BEEP
- JMP FR_170
-
- FR_195: INC COLUMN
- CALL CURSOR_ON
- JMP FR_170
-
- FR_200: DEC COLUMN
- CALL CURSOR_ON
- JMP FR_170
-
- FR_205: DEC ROW
- CALL CURSOR_ON
- JMP FR_170
-
- FR_210: INC ROW
- CALL CURSOR_ON
- JMP FR_170
-
- FR_215: MOV AH,0
- MOV AL,COLUMN
- SHL AL,1
- MOV DI,1174
- ADD DI,AX
- MOV AL,ROW
- MOV DL,160
- MUL DL
- ADD DI,AX
- CMP BYTE PTR ES:[DI],9 ;OFF
- JE FR_220
- MOV AL,9
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- JMP FR_225
- FR_220: MOV AL,32 ;ON
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- FR_225: INC COLUMN
- CALL CURSOR_ON
- JMP FR_170
-
- FR_230: CALL SAVE_FONT
-
- FR_235: MOV AH,2
- MOV DH,0
- MOV DL,0
- MOV BH,0
- INT 10H
- CALL DISPLAY_WIN_1
- JMP GET_REQUEST
-
- FR_240: CALL SAVE_FONT
- MOV AH,2
- MOV DH,0
- MOV DL,0
- MOV BH,0
- INT 10H
- PUSH ES
- MOV AX,CS
- MOV ES,AX
- LEA SI,SAVE_MSG
- LEA DI,WINDOW_3+103
- MOV CX,4
- REP MOVSB
- LEA DI,ASCIIZ
- MOV AL,00H
- MOV CX,128
- REP STOSB
- POP ES
- CALL GET_DSN
- CMP AH,0
- JE FR_245
- JMP FR_075
- FR_245: MOV AX,CS
- MOV DS,AX
- MOV ES,AX
- MOV AH,3DH ;OPEN FONT FILE
- MOV AL,01H
- LEA DX,ASCIIZ
- CLC
- INT 21H
- JC FR_250 ;NOT FOUND
- JMP FR_255
- FR_250: MOV AH,3CH ;CREATE NEW FILE
- MOV CX,0
- LEA DX,ASCIIZ
- CLC
- INT 21H
- JNC FR_255
- JMP FR_260
- FR_255: MOV HANDLE,AX
- MOV BX,AX
- MOV AH,42H ;SET TO EOF
- MOV CX,0
- MOV DX,0
- MOV AL,2
- INT 21H
- MOV BX,HANDLE
- MOV AH,40H ;WRITE IT
- MOV CX,19
- LEA DX,FONTREG_PREFIX
- INT 21H
- MOV AH,3EH ;CLOSE
- MOV BX,HANDLE
- INT 21H
- JMP FR_075
- FR_260: CALL BEEP ;ERROR
- JMP FR_075
-
- FR_265: CALL SAVE_FONT
- MOV AH,2
- MOV DH,0
- MOV DL,0
- MOV BH,0
- INT 10H
- LEA SI,FONTREG_PREFIX
- MOV CX,8
- FR_270: MOV AL,DS:[SI]
- CALL PRINTER_PORT
- INC SI
- LOOP FR_270
- LEA SI,FONT_CHARACTER
- MOV CX,11
- FR_275: MOV AL,DS:[SI]
- CALL PRINTER_PORT
- INC SI
- LOOP FR_275
- JMP FR_075
-
- FR_280: LEA BX,FONT_CHARACTER ;CLEAR PIN MAP
- MOV AL,00H
- MOV CX,11
- FR_285: MOV DS:[BX],AL
- INC BX
- LOOP FR_285
- JMP FR_075
- FONT_REQUEST ENDP
-
- GET_DSN PROC NEAR
- MOV WINDOW_BUMP,82
- MOV AL,COLOR_4
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,12
- LEA SI,WINDOW_3
- MOV WINDOW_NUMBER,SI
- MOV WINDOW_START,848
- MOV WINDOW_WIDTH,39
- CALL DISPLAY_WINDOW
-
- GD_005: MOV AH,0 ;GET DRIVE
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE GD_010
- RET
- GD_010: CMP AL,'a'
- JB GD_015
- CMP AL,'z'
- JA GD_015
- SUB AL,' '
- GD_015: CMP AL,'A'
- JB GD_020
- CMP AL,'Z'
- JA GD_020
- LEA SI,ASCIIZ
- MOV BYTE PTR DS:[SI],AL
- MOV BYTE PTR ES:[1506],AL
- MOV AH,COLOR_4
- MOV BYTE PTR ES:[1507],AH
- JMP GD_025
- GD_020: CALL BEEP
- JMP GD_005
-
- GD_025: MOV AL,':'
- MOV BYTE PTR DS:[SI+1],AL
- MOV AL,'\'
- MOV BYTE PTR DS:[SI+2],AL
- ADD SI,3
- MOV AH,COLOR_5 ;GET NEW PATH
- MOV BYTE PTR ES:[1815],AH
- MOV DI,1814
- MOV CX,0
- GD_030: MOV AH,0
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE GD_035
- RET
- GD_035: CMP AL,08H ;BACKSPACE
- JNE GD_045
- CMP CX,0 ;ALREADY AT POS 1
- JE GD_040
- MOV AL,COLOR_4
- MOV CUR_COLOR_1,AL
- MOV AL,COLOR_5
- MOV CUR_COLOR_2,AL
- CALL BACKSPACE
- JMP GD_030
- GD_040: CALL BEEP
- JMP GD_030
- GD_045: CMP AL,0DH ;ENTER
- JE GD_060
- CMP AL,' ' ;SPACE
- JNE GD_050
- MOV AL,0
- GD_050: CMP AL,'a'
- JB GD_055
- CMP AL,'z'
- JA GD_050
- SUB AL,' '
- GD_055: MOV ES:[DI],AL
- MOV DS:[SI],AL
- MOV AH,COLOR_4
- INC DI
- MOV ES:[DI],AH
- MOV AH,COLOR_5
- MOV ES:[DI+2],AH
- INC DI
- INC SI
- INC CX
- CMP CX,34
- JE GD_060
- JMP GD_030
- GD_060: MOV AH,COLOR_4
- MOV ES:[DI+1],AH
- CMP BYTE PTR DS:[SI-1],'\'
- JE GD_065
- MOV AL,'\'
- MOV DS:[SI],AL
- INC SI
- GD_065: MOV DI,2154 ;GET DSN
- MOV CX,0
- MOV AH,COLOR_5
- MOV ES:[DI+1],AH
- GD_070: MOV AH,0
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE GD_075
- RET
- GD_075: CMP AL,08H ;BACKSPACE
- JNE GD_085
- CMP CX,0 ;AT POSITION 1
- JE GD_080
- MOV AL,COLOR_4
- MOV CUR_COLOR_1,AL
- MOV AL,COLOR_5
- MOV CUR_COLOR_2,AL
- CALL BACKSPACE
- JMP GD_070
- GD_080: CALL BEEP
- JMP GD_070
- GD_085: CMP AL,0DH ;ENTER
- JNE GD_090
- MOV AH,00H
- RET
- GD_090: CMP AL,'a'
- JB GD_095
- CMP AL,'z'
- JA GD_095
- SUB AL,' '
- GD_095: CMP CX,12
- JE GD_105
- INC CX
- MOV DS:[SI],AL
- INC SI
- GD_100: MOV ES:[DI],AL
- INC DI
- MOV AH,COLOR_4
- MOV ES:[DI],AH
- JE GD_105
- MOV AH,COLOR_5
- MOV ES:[DI+2],AH
- INC DI
- JMP GD_070
- GD_105: CALL BEEP
- JMP GD_070
- GET_DSN ENDP
-
- PAGE_FORMAT PROC NEAR
- MOV WINDOW_BUMP,100
- MOV AL,COLOR_6
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,12
- MOV AX,OFFSET WINDOW_4
- MOV WINDOW_NUMBER,AX
- MOV WINDOW_START,1180
- MOV WINDOW_WIDTH,30
- CALL DISPLAY_WINDOW
- PF_005: MOV AH,0
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE PF_010
- CALL DISPLAY_WIN_1
- RET
- PF_010: CMP AL,'a'
- JB PF_015
- CMP AL,'z'
- JA PF_015
- SUB AL,' '
- PF_015: CMP AL,'A' ;RESET PRINTER REQUEST
- JNE PF_030
- MOV AH,COLOR_7
- CALL V_TRACE
- MOV BYTE PTR ES:[1507],AH
- LEA SI,RESET_STRING
- PF_020: MOV AL,BYTE PTR CS:[SI]
- CMP AL,0FFH
- JE PF_025
- CALL PRINTER_PORT
- INC SI
- JMP SHORT PF_020
- PF_025: JMP PF_005
- PF_030: CMP AL,'B' ;TOP OF FORM REQUEST
- JNE PF_035
- MOV AH,COLOR_7
- CALL V_TRACE
- MOV BYTE PTR ES:[1667],AH
- MOV AL,27
- CALL PRINTER_PORT
- MOV AL,4
- CALL PRINTER_PORT
- JMP PF_005
- PF_035: MOV FONT_TYPE,AL ;SAVE REQUEST TYPE
- CMP AL,'C' ;FORM LENGTH IN INCHES
- JE PF_040
- JMP PF_115
- PF_040: MOV AL,'_'
- MOV AH,COLOR_7
- CALL V_TRACE
- MOV BYTE PTR ES:[2486],AL
- MOV BYTE PTR ES:[2488],AL
- MOV BYTE PTR ES:[2490],AL
- MOV DI,1827
- CMP FONT_TYPE,'C'
- JE PF_045
- MOV DI,1987
- PF_045: MOV BYTE PTR ES:[DI],AH
- MOV BYTE PTR ES:[2487],AH
- MOV DI,2486
- MOV SI,OFFSET FORMS_BUFFER
- MOV CX,0
- PF_050: MOV AH,0
- INT 16H
- CMP AL,08H
- JNE PF_055
- CMP CX,0
- JE PF_070
- MOV AL,COLOR_6
- MOV CUR_COLOR_1,AL
- MOV AL,COLOR_7
- MOV CUR_COLOR_2,AL
- CALL BACKSPACE
- JMP PF_050
- PF_055: CMP AH,01H
- JNE PF_060
- MOV AL,' '
- CALL V_TRACE
- MOV BYTE PTR ES:[2486],AL
- MOV BYTE PTR ES:[2488],AL
- MOV BYTE PTR ES:[2490],AL
- MOV AL,0
- MOV FORMS_BUFFER[0],AL
- MOV FORMS_BUFFER[1],AL
- MOV FORMS_BUFFER[2],AL
- JMP PF_005
- PF_060: CMP AL,0DH
- JNE PF_065
- JMP PF_080
- PF_065: CMP AL,'0'
- JB PF_070
- CMP AL,'9'
- JA PF_070
- JMP PF_075
- PF_070: CALL BEEP
- JMP PF_050
- PF_075: CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- MOV BYTE PTR DS:[SI],AL
- ADD DI,2
- INC SI
- INC CX
- CMP CX,3
- JE PF_080
- JMP PF_050
- PF_080: MOV AX,0
- MOV SI,OFFSET FORMS_BUFFER
- CMP CX,3
- JB PF_085
- MOV DL,100
- MOV AL,CS:[SI]
- SUB AL,'0'
- MUL DL
- INC SI
- PF_085: PUSH AX
- CMP CX,2
- JB PF_090
- MOV DL,10
- MOV AL,CS:[SI]
- SUB AL,'0'
- MUL DL
- XCHG AX,BX
- POP AX
- ADD AX,BX
- PUSH AX
- INC SI
- PF_090: POP AX
- MOV BH,0
- MOV BL,CS:[SI]
- SUB BL,'0'
- ADD AX,BX
- CMP AX,256
- JB PF_100
- CALL BEEP
- MOV AH,COLOR_6
- MOV DI,1827
- CMP FONT_TYPE,'C'
- JE PF_095
- MOV DI,1987
- PF_095: CALL V_TRACE
- MOV BYTE PTR ES:[DI],AH
- JMP PF_110
- PF_100: XCHG AX,BX
- MOV AL,27
- CALL PRINTER_PORT
- MOV AL,'C'
- CALL PRINTER_PORT
- CMP FONT_TYPE,'D'
- JE PF_105
- MOV AL,0
- CALL PRINTER_PORT
- PF_105: XCHG AX,BX
- CALL PRINTER_PORT
- PF_110: MOV AL,' '
- MOV AH,COLOR_6
- CALL V_TRACE
- MOV BYTE PTR ES:[2486],AL
- MOV BYTE PTR ES:[2487],AH
- MOV BYTE PTR ES:[2488],AL
- MOV BYTE PTR ES:[2489],AH
- MOV BYTE PTR ES:[2490],AL
- MOV BYTE PTR ES:[2491],AH
- JMP PF_005
- PF_115: CMP AL,'D' ;FORM LENGTH IN LINES
- JNE PF_120
- JMP PF_040
- PF_120: CMP AL,'E'
- JE PF_125
- CALL BEEP
- JMP PF_005
-
- PF_125: MOV AX,CS ;FILL RETURN ADDRESS
- MOV ES,AX
- MOV CX,4
- LEA SI,RETURN_ADDRESS
- MOV DI,OFFSET WINDOW_6 + 76
- PF_130: PUSH CX
- MOV CX,33
- REP MOVSB
- ADD DI,4
- POP CX
- LOOP PF_130
-
- MOV DI,OFFSET WINDOW_6+108 ;PUT _ IN ADDRESS
- MOV CX,4
- PF_135: PUSH DI
- PUSH CX
- MOV CX,33
- PF_140: MOV AL,BYTE PTR ES:[DI]
- CMP AL,00H
- JE PF_145
- CMP AL,' '
- JNE PF_150
- PF_145: MOV AL,5FH
- MOV BYTE PTR ES:[DI],AL
- DEC DI
- LOOP PF_140
- PF_150: POP CX
- POP DI
- ADD DI,37
- LOOP PF_135
-
- LEA DI,BUFFER ;CLEAR WORK BUFFER
- LEA SI,RETURN_ADDRESS
- MOV CX,132
- PF_155: MOV AL,DS:[SI]
- CMP AL,'_'
- JNE PF_160
- MOV AL,' '
- PF_160: MOV ES:[DI],AL
- INC DI
- INC SI
- LOOP PF_155
- MOV AL,' ' ;BLANK MAILING ADDRESS
- MOV CX,132
- REP STOSB
-
- LEA SI,WINDOW_6B ;RETURN ADDRESS INPUT
- LEA DI,WINDOW_6+12
- MOV CX,15
- REP MOVSB
- LEA SI,WINDOW_6D
- LEA DI,WINDOW_6A+2
- MOV CX,21
- REP MOVSB
- MOV WINDOW_BUMP,86
- MOV AL,COLOR_3
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,9
- MOV AX,OFFSET WINDOW_6
- MOV WINDOW_NUMBER,AX
- MOV WINDOW_START,668
- MOV WINDOW_WIDTH,37
- CALL DISPLAY_WINDOW
- MOV AL,COLOR_3
- MOV CUR_COLOR_1,AL
- MOV CUR_COLOR_2,0F4H
- LEA SI,BUFFER
- MOV DI,992
- MOV CX,0
- MOV LINE,1
- CALL V_TRACE
- MOV AL,CUR_COLOR_2
- MOV BYTE PTR ES:[DI+1],AL
- CALL ENVELOPE
- CMP AH,01H
- JNE PF_165
- JMP PF_265
-
- PF_165: MOV AX,CS
- MOV ES,AX
- LEA SI,BUFFER ;SAVE RETURN
- LEA DI,RETURN_ADDRESS
- MOV CX,4
- PF_170: PUSH CX
- PUSH DI
- PUSH SI
- MOV CX,33
- PF_175: CMP BYTE PTR DS:[SI],' '
- JNE PF_180
- INC SI
- LOOP PF_175
- JMP PF_185
- PF_180: POP SI
- PUSH SI
- MOV CX,33
- REP MOVSB
- PF_185: POP SI
- POP DI
- POP CX
- ADD SI,33
- ADD DI,33
- LOOP PF_170
- LEA DI,WINDOW_6 + 76 ;CLEAR WINDOW 6
- MOV CX,4
- MOV AL,'_'
- PF_190: PUSH CX
- MOV CX,33
- REP STOSB
- POP CX
- ADD DI,4
- LOOP PF_190
-
- LEA SI,WINDOW_6C ;MAILING ADDRESS INPUT
- LEA DI,WINDOW_6+12
- MOV CX,15
- REP MOVSB
- MOV WINDOW_BUMP,86
- MOV AL,COLOR_4
- MOV WINDOW_COLOR,AL
- MOV WINDOW_LINES,9
- MOV AX,OFFSET WINDOW_6
- MOV WINDOW_NUMBER,AX
- MOV WINDOW_START,1654
- MOV WINDOW_WIDTH,37
- CALL DISPLAY_WINDOW
- MOV AL,COLOR_4
- MOV CUR_COLOR_1,AL
- MOV CUR_COLOR_2,0F2H
- LEA SI,BUFFER+132
- MOV DI,1978
- MOV CX,0
- MOV LINE,1
- CALL V_TRACE
- MOV AL,CUR_COLOR_2
- MOV BYTE PTR ES:[DI+1],AL
- CALL ENVELOPE
- CMP AH,01H
- JNE PF_195
- JMP PF_265
- PF_195: LEA SI,WINDOW_6E
- MOV DI,2778
- MOV CX,21
- CALL V_TRACE
- PF_200: MOV AL,BYTE PTR DS:[SI]
- MOV BYTE PTR ES:[DI],AL
- ADD DI,2
- INC SI
- LOOP PF_200
- PF_205: MOV AH,0
- INT 16H
- CMP AH,01H ;ESCAPE
- JNE PF_210
- JMP PF_265
- PF_210: CMP AH,3BH ;F1 = STANDARD SIZE
- JE PF_215
- CMP AH,3CH ;F2 = LEGAL SIZE
- JE PF_215
- CALL BEEP
- JMP PF_205
- PF_215: MOV DX,AX ;SAVE SIZE
- MOV AL,0DH ;JUMP DOWN FIVE LINES
- CALL PRINTER_PORT
- MOV CX,5
- PF_220: MOV AL,0AH
- CALL PRINTER_PORT
- LOOP PF_220
- LEA SI,BUFFER ;ADDRESS BUFFER
- MOV CX,8
- PF_225: PUSH CX
- CMP CX,4 ;BLANK MIDDLE LINES ?
- JNE PF_235
- PUSH CX
- MOV CX,8
- PF_230: MOV AL,0AH
- CALL PRINTER_PORT
- LOOP PF_230
- POP CX
- PF_235: CMP CX,4 ;RETURN OR MAILING ?
- JA PF_250
- CMP DH,3BH ;WHAT SIZE ?
- JE PF_240
- MOV CX,46 ;LEGAL SIZE INDENT
- JMP PF_245
- PF_240: MOV CX,25 ;STANDARD SIZE
- PF_245: MOV AL,' '
- CALL PRINTER_PORT
- LOOP PF_245
- PF_250: MOV CX,33
- PF_255: MOV AL,BYTE PTR DS:[SI] ;PRINT THE LINE
- CALL PRINTER_PORT
- INC SI
- LOOP PF_255
- MOV AL,0DH ;MOVE TO NEXT LINE
- CALL PRINTER_PORT
- MOV AL,0AH
- CALL PRINTER_PORT
- POP CX
- LOOP PF_225
- MOV AL,0DH ;PUT CARRIAGE BACK
- CALL PRINTER_PORT
- MOV CX,10 ;PUSH OUT ENVELOPE
- PF_260: MOV AL,0AH
- CALL PRINTER_PORT
- LOOP PF_260
- PF_265: CALL DISPLAY_WIN_1
- RET
- PAGE_FORMAT ENDP
-
- PRINTER_PORT PROC NEAR
- PUSH DX
- MOV DX,ACTIVE_PRINTER
- OUT DX,AL
- INC DX
- PRINTER_BUSY: IN AL,DX
- TEST AL,80H
- JZ PRINTER_BUSY
- INC DX
- MOV AL,0DH
- OUT DX,AL
- MOV AL,0CH
- OUT DX,AL
- POP DX
- RET
- PRINTER_PORT ENDP
-
- SAVE_FONT PROC NEAR
- MOV DI,1174
- LEA SI,FONT_CHARACTER
- MOV CX,11
- SF_005: PUSH CX
- PUSH DI
- MOV CX,8
- MOV BL,10000000B
- MOV AL,00H
- CALL V_TRACE
- SF_010: MOV AH,BYTE PTR ES:[DI]
- CMP AH,32
- JE SF_015
- ADD AL,BL
- SF_015: SHR BL,1
- ADD DI,160
- LOOP SF_010
- MOV BYTE PTR DS:[SI],AL
- POP DI
- POP CX
- INC SI
- ADD DI,2
- LOOP SF_005
- RET
- SAVE_FONT ENDP
-
- SEND_PRINTER PROC NEAR
- MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- PUSH SI
- MOV BX,WORD PTR CS:[SI+3]
- CALL V_TRACE
- MOV AH,COLOR_2
- MOV ES:[BX],AH ;SET HIGHLIGHT
- SP_005: MOV AL,CS:[SI]
- CALL PRINTER_PORT ;SEND ESC STRING
- INC SI
- LOOP SP_005
- POP SI
- ADD SI,5
- MOV AH,COLOR_1 ;RESET HIGHLIGHTS
- MOV CX,5
- SP_010: MOV BX,WORD PTR CS:[SI]
- CMP BX,0000
- JE SP_015
- CALL V_TRACE
- MOV ES:[BX],AH
- ADD SI,2
- LOOP SP_010
- SP_015: RET
- SEND_PRINTER ENDP
-
- TW_BIN_LINE PROC NEAR ;SHOW LINE NUMBER
- PUSH DI
- MOV DI,3982
- MOV AL,ROW
- INC AL
- MOV AH,0
- MOV DL,10
- DIV DL
- ADD AL,'0'
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- SUB AL,'0'
- MOV AH,0
- MOV DL,10
- MUL DL
- MOV AH,ROW
- INC AH
- SUB AH,AL
- ADD AH,'0'
- MOV BYTE PTR ES:[DI+2],AH
- MOV DI,3996
- MOV AL,COLUMN
- INC AL
- MOV AH,0
- MOV DL,10
- DIV DL
- ADD AL,'0'
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- SUB AL,'0'
- MOV AH,0
- MOV DL,10
- MUL DL
- MOV AH,COLUMN
- INC AH
- SUB AH,AL
- ADD AH,'0'
- MOV BYTE PTR ES:[DI+2],AH
- POP DI
- RET
- TW_BIN_LINE ENDP
-
- TW_LINES PROC NEAR
- LEA SI,TYPEWRITER_BUFF
- MOV AL,ROW
- MOV AH,0
- MOV DL,80
- MUL DL
- ADD SI,AX
- MOV DI,0
- MOV AH,0EH ;BLACK/YELLOW
- MOV CX,24
- TW_005: PUSH CX
- CALL V_TRACE
- MOV CX,80
- TW_010: MOV AL,DS:[SI]
- MOV WORD PTR ES:[DI],AX
- INC SI
- INC DI
- INC DI
- LOOP TW_010
- POP CX
- LOOP TW_005
- RET
- TW_LINES ENDP
-
- TYPEWRITER PROC NEAR
- MOV AX,SCREEN_ADDRESS
- MOV ES,AX
- MOV DI,3840
- MOV AH,60H ;YELLOW/BLACK
- MOV CX,80
- LEA SI,TYPEWRITER_MSG
- CALL V_TRACE
- TY_005: MOV AL,BYTE PTR DS:[SI]
- MOV WORD PTR ES:[DI],AX
- INC SI
- INC DI
- INC DI
- LOOP TY_005
- MOV ROW,0
- MOV COLUMN,0
- MOV AH,2
- MOV DX,0
- MOV BH,0
- INT 10H
- TY_010: CALL TW_LINES
- CALL TW_BIN_LINE
- TY_015: MOV AH,0
- INT 16H
- CMP AH,50H ;DOWN ARROW
- JNE TY_020
- TY_015X: CMP ROW,65
- JE TY_015
- MOV AH,3 ;GET CURSOR LOCATION
- MOV BH,0
- INT 10H
- CMP DH,23
- JE TY_015A
- INC DH ;MOVE CURSOR DOWN
- MOV AH,2
- INT 10H
- INC ROW
- CALL TW_BIN_LINE
- JMP TY_015
- TY_015A: CMP ROW,65
- JE TY_015
- INC ROW
- TY_015B: MOV AL,ROW
- PUSH AX
- SUB ROW,23
- CALL TW_LINES
- POP AX
- MOV ROW,AL
- CALL TW_BIN_LINE
- JMP TY_015
- TY_020: CMP AH,48H ;UP ARROW
- JNE TY_025
- CMP ROW,0
- JE TY_015
- MOV AH,3
- MOV BH,0
- INT 10H
- CMP DH,0
- JE TY_020A
- TY_020X: DEC DH
- MOV AH,2
- MOV BH,0
- INT 10H
- DEC ROW
- CALL TW_BIN_LINE
- JMP TY_015
- TY_020A: DEC ROW
- JMP TY_010
- TY_025: CMP AH,47H ;HOME
- JNE TY_030
- MOV ROW,0
- MOV COLUMN,0
- MOV AH,2
- MOV DX,0
- MOV BH,0
- INT 10H
- JMP TY_010
- TY_030: CMP AH,4FH ;END
- JNE TY_035
- MOV ROW,42
- MOV COLUMN,0
- MOV AH,2
- MOV DX,0
- MOV BH,0
- INT 10H
- JMP TY_010
- TY_035: CMP AH,49H ;PAGE UP
- JNE TY_045
- TY_036: MOV AH,2
- MOV DX,0
- MOV BH,0
- INT 10H
- MOV COLUMN,0
- CMP ROW,24
- JB TY_040
- SUB ROW,24
- JMP TY_010
- TY_040: MOV ROW,0
- JMP TY_010
- TY_045: CMP AH,51H ;PAGE DOWN
- JNE TY_060
- MOV AH,2
- MOV DX,0
- MOV BH,0
- INT 10H
- MOV COLUMN,0
- CMP ROW,42
- JB TY_050
- MOV ROW,42
- JMP TY_010
- TY_050: ADD ROW,24
- CMP ROW,42
- JB TY_055
- MOV ROW,42
- TY_055: JMP TY_010
- TY_060: CMP AH,4DH ;RIGHT ARROW
- JNE TY_080
- TY_060A: MOV AH,3
- MOV BH,0
- INT 10H
- CMP COLUMN,79
- JE TY_065
- INC DL
- MOV AH,2
- INT 10H
- INC COLUMN
- CALL TW_BIN_LINE
- JMP TY_015
- TY_065: CMP ROW,65
- JNE TY_070
- JMP TY_015
- TY_070: CMP DH,23
- JNE TY_075
- MOV AH,2
- MOV DL,0
- MOV BH,0
- INT 10H
- INC ROW
- MOV COLUMN,0
- JMP TY_015B
- TY_075: MOV DL,0
- INC DH
- MOV AH,2
- INT 10H
- INC ROW
- MOV COLUMN,0
- CALL TW_BIN_LINE
- JMP TY_015
- TY_080: CMP AH,01H ;ESCAPE
- JNE TY_090
- JMP TY_900
- TY_090: CMP AH,1CH ;CARRIAGE RETURN
- JNE TY_095
- MOV AH,3
- MOV BH,0
- INT 10H
- MOV DL,0
- MOV AH,2
- MOV BH,0
- INT 10H
- MOV COLUMN,0
- CALL TW_BIN_LINE
- JMP TY_015X
- TY_095: CMP AH,4BH ;LEFT ARROW
- JE TY_095A
- CMP AH,0EH
- JE TY_095A
- JMP TY_115
- TY_095A: MOV AH,3
- MOV BH,0
- INT 10H
- CMP COLUMN,0
- JE TY_100
- DEC DL
- MOV AH,2
- INT 10H
- DEC COLUMN
- CALL TW_BIN_LINE
- JMP TY_015
- TY_100: CMP ROW,0
- JNE TY_105
- JMP TY_015
- TY_105: MOV DL,79
- MOV COLUMN,79
- JMP TY_020X
- TY_110: MOV DL,0
- DEC DH
- MOV AH,2
- INT 10H
- INC ROW
- MOV COLUMN,79
- CALL TW_BIN_LINE
- JMP TY_015
- TY_115: CMP AH,53H ;DELETE
- JNE TY_118
- LEA SI,TYPEWRITER_BUFF
- MOV AL,ROW
- MOV AH,0
- MOV DL,80
- MUL DL
- ADD SI,AX
- PUSH SI
- MOV AL,COLUMN
- MOV AH,0
- ADD SI,AX
- MOV CL,79
- SUB CL,COLUMN
- MOV CH,0
- CMP CX,0
- JE TY_116A
- TY_116: MOV AL,BYTE PTR DS:[SI+1]
- MOV BYTE PTR DS:[SI],AL
- INC SI
- LOOP TY_116
- TY_116A: MOV BYTE PTR DS:[SI],' '
- POP SI
- MOV AH,3
- MOV BH,0
- INT 10H
- MOV AL,DH
- MOV AH,0
- MOV DL,160
- MUL DL
- MOV DI,AX
- MOV CX,80
- MOV AH,0EH
- CALL V_TRACE
- TY_117: MOV AL,BYTE PTR DS:[SI]
- MOV BYTE PTR ES:[DI],AL
- INC SI
- INC DI
- INC DI
- LOOP TY_117
- JMP TY_015
- TY_118: CMP AH,52H ;INSERT
- JNE TY_119
- CMP INSERT,' '
- JE TY_118A
- MOV INSERT,' '
- CALL V_TRACE
- MOV BYTE PTR ES:[3962],' '
- MOV BYTE PTR ES:[3964],' '
- MOV BYTE PTR ES:[3966],' '
- JMP TY_015
- TY_118A: MOV INSERT,'I'
- MOV AL,INSERT
- CALL V_TRACE
- MOV BYTE PTR ES:[3962],'I'
- MOV BYTE PTR ES:[3964],'N'
- MOV BYTE PTR ES:[3966],'S'
- JMP TY_015
- TY_119: CMP AH,3CH ;F2 - CLEAR
- JNE TY_119A
- MOV CX,2640
- MOV AX,2020H
- LEA SI,TYPEWRITER_BUFF
- TY_119X: MOV WORD PTR DS:[SI],AX
- INC SI
- INC SI
- LOOP TY_119X
- JMP TY_036
- TY_119A: CMP AH,3BH
- JNE TY_119B
- LEA SI,TYPEWRITER_BUFF
- MOV CX,66
- TY_119C: PUSH CX
- MOV CX,80
- TY_119D: MOV AL,BYTE PTR DS:[SI]
- CALL PRINTER_PORT
- INC SI
- LOOP TY_119D
- MOV AL,0DH
- CALL PRINTER_PORT
- MOV AL,0AH
- CALL PRINTER_PORT
- POP CX
- LOOP TY_119C
- JMP TY_015
- TY_119B: CMP AL,0
- JNE TY_120
- CALL BEEP ;UNKNOWN REQUEST
- JMP TY_015
- TY_120: CMP INSERT,'I'
- JE TY_125
- PUSH AX ;DISPLAY CHARACTER
- MOV AH,3
- MOV BH,0
- INT 10H
- PUSH DX
- MOV AL,DH
- MOV AH,0
- MOV DL,160
- MUL DL
- POP DX
- PUSH AX
- MOV AL,DL
- MOV AH,0
- MOV DL,2
- MUL DL
- POP DI
- ADD DI,AX
- POP AX
- CALL V_TRACE
- MOV BYTE PTR ES:[DI],AL
- PUSH AX
- LEA SI,TYPEWRITER_BUFF
- MOV AL,ROW
- MOV AH,0
- MOV DL,80
- MUL DL
- ADD SI,AX
- MOV AL,COLUMN
- MOV AH,0
- ADD SI,AX
- POP AX
- MOV BYTE PTR DS:[SI],AL
- JMP TY_060A
- TY_125: CMP COLUMN,79
- JB TY_126
- CALL BEEP
- JMP TY_015
- TY_126: PUSH AX
- LEA SI,TYPEWRITER_BUFF
- MOV AL,ROW
- MOV AH,0
- MOV DL,80
- MUL DL
- ADD SI,AX
- ADD SI,79
- MOV CX,80
- SUB CL,COLUMN
- DEC CX
- TY_130: MOV AL,BYTE PTR DS:[SI-1]
- MOV BYTE PTR DS:[SI],AL
- DEC SI
- LOOP TY_130
- POP AX
- MOV BYTE PTR DS:[SI],AL
- LEA SI,TYPEWRITER_BUFF
- MOV AL,ROW
- MOV AH,0
- MOV DL,80
- MUL DL
- ADD SI,AX
- MOV AH,3
- MOV BH,0
- INT 10H
- MOV AL,DH
- MOV AH,0
- MOV DL,160
- MUL DL
- MOV DI,AX
- MOV CX,80
- MOV AH,0EH
- CALL V_TRACE
- TY_135: MOV AL,BYTE PTR DS:[SI]
- MOV BYTE PTR ES:[DI],AL
- INC SI
- INC DI
- INC DI
- LOOP TY_135
- JMP TY_060A
- TY_900: CALL DISPLAY_WIN_1
- MOV AH,2
- MOV DX,0
- MOV BH,0
- INT 10H
- RET
- TYPEWRITER ENDP
-
- V_TRACE PROC NEAR
- CMP MONO,'Y' ;HANDLE C/G ADAPTER
- JE VT_010 ;SNOW
- PUSH DX
- PUSH AX
- MOV DX,3DAH
- VT_005: IN AX,DX
- AND AX,8
- JZ VT_005
- POP AX
- POP DX
- VT_010: RET
- V_TRACE ENDP
-
- PROGRAM_END LABEL BYTE
-
- ADDRESS_LOC DW 0
- ALREADY_MSG DB 0DH,0AH,'PRO-SET ALREADY INSTALLED',0DH,0AH,'$'
- INSTALL_MSG DB 0DH,0AH,'PRO-SET 3.5 INSTALLED',0DH,0AH,'$'
- NO_PARM_MSG DB 0DH,0AH,'╔════════════════════════════════════════╗'
- DB 0DH,0AH,'║ ACTIVATE PRO-SET 3.5 AS FOLLOWS: ║'
- DB 0DH,0AH,'║ PRO-SET [R=x C=x V=x S=xx K=xx A=xxx] ║'
- DB 0DH,0AH,'║----------------------------------------║'
- DB 0DH,0AH,'║ R indicates Run Type: ║'
- DB 0DH,0AH,'║ x = "R" for Resident, "B" for Batch ║'
- DB 0DH,0AH,'║ C indicates Colors Wanted: ║'
- DB 0DH,0AH,'║ x = "C" for Color, "M" for Mono ║'
- DB 0DH,0AH,'║ V indicates Sound Wanted: ║'
- DB 0DH,0AH,'║ x = "Y" for Yes "N" for No ║'
- DB 0DH,0AH,'║ S indicates scan code of Hot-Key: ║'
- DB 0DH,0AH,'║ xx = hexidecimal scan code ║'
- DB 0DH,0AH,'║ K indicates the Shift/CTRL/ALT keys: ║'
- DB 0DH,0AH,'║ xx = hexidecimal value of key combo ║'
- DB 0DH,0AH,'║ A indicates the Return Address DSN ║'
- DB 0DH,0AH,'║ xxx = [Drive]:\[Path]\[Dataset Name] ║'
- DB 0DH,0AH,'║----------------------------------------║'
- DB 0DH,0AH,'║=> Defaults are R=R C=C V=Y S=19 K=0C <=║'
- DB 0DH,0AH,'╚════════════════════════════════════════╝'
- DB 0DH,0AH,0AH,'$'
- PARMS DB 'S=K=V=C=R=A='
-
- HEX_BIN PROC NEAR
- MOV DL,BYTE PTR DS:[SI+2] ;CONVERT EXTERNAL HEX
- CMP DL,'0' ;TO INTERNAL BINARY
- JL HB_025
- CMP DL,'F'
- JA HB_025
- CMP DL,':'
- JL HB_005
- CMP DL,'A'
- JL HB_025
- SUB DL,07H
- HB_005: SUB DL,30H
- CMP DL,'9'
- JLE HB_010
- DEC DL
- HB_010: MOV AL,DL
- MOV DL,10H
- MUL DL
- MOV DL,BYTE PTR DS:[SI+3]
- CMP DL,'0'
- JL HB_025
- CMP DL,'F'
- JA HB_025
- CMP DL,':'
- JL HB_015
- CMP DL,'A'
- JL HB_025
- SUB DL,07H
- HB_015: SUB DL,30H
- CMP DL,'9'
- JLE HB_020
- DEC DL
- HB_020: MOV DH,0
- ADD AX,DX
- JMP HB_030
- HB_025: MOV AX,0FFFFH
- HB_030: RET
- HEX_BIN ENDP
-
- CHECK_CAPS PROC NEAR
- CMP AL,'a'
- JB CC_005
- CMP AL,'z'
- JA CC_005
- SUB AL,' '
- CC_005: RET
- CHECK_CAPS ENDP
-
- START: MOV AX,CS ;LOCATE PARMS, IF ANY
- MOV DS,AX
- MOV SI,80H
- MOV CH,0
- MOV CL,BYTE PTR DS:[SI]
- INC SI
- CMP CX,0
- JNE FIND_PARMS
-
- MOV COLOR_REQUEST,'C' ;SET DEFAULTS
- MOV SOUND_STATUS,'Y'
- MOV KBFLAG,0CH
- MOV SCAN_CODE,19H
- MOV RESIDENT,'R'
-
- JMP MAKE_RESIDENT
-
- PARM_ERROR: PUSH DS ;SET UP NORMAL RETURN
- MOV AX,0 ;STACK
- PUSH AX
-
- PUSH CS ;TELL USER HE DID IT
- POP DS ;WRONG
- LEA DX,NO_PARM_MSG
- MOV AH,09H
- INT 21H
- CALL BEEP
- RET
-
- FIND_PARMS: MOV SI,81H
- MOV CH,0
- MOV CL,BYTE PTR DS:[80H]
-
- PUSH CX
- PUSH SI
- CAPS_LOOP: MOV AL,DS:[SI]
- CALL CHECK_CAPS
- MOV DS:[SI],AL
- INC SI
- LOOP CAPS_LOOP
- POP SI
- POP CX
-
- FIND_RESIDENT: PUSH CX
- PUSH SI
- LEA DI,PARMS+8
- MOV CX,2
- REPZ CMPSB
- JE GOT_RESIDENT
- POP SI
- POP CX
- INC SI
- LOOP FIND_RESIDENT
- JMP FIND_COLOR
- GOT_RESIDENT: POP SI
- POP CX
- MOV RESIDENT,'B'
- CMP BYTE PTR DS:[SI+2],'B'
- JE FIND_COLOR
- MOV RESIDENT,'R'
- CMP BYTE PTR DS:[SI+2],'R'
- JE FIND_COLOR
- JMP PARM_ERROR
-
- FIND_COLOR: MOV SI,81H
- MOV CH,0
- MOV CL,BYTE PTR DS:[80H]
- FIND_COLOR_2: PUSH CX
- PUSH SI
- LEA DI,PARMS+6
- MOV CX,2
- REPZ CMPSB
- JE GOT_COLOR
- POP SI
- POP CX
- INC SI
- LOOP FIND_COLOR_2
- JMP FIND_SOUND
- GOT_COLOR: POP SI
- POP CX
- MOV COLOR_REQUEST,'M'
- CMP BYTE PTR DS:[SI+2],'M'
- JE FIND_SOUND
- MOV COLOR_REQUEST,'C'
- CMP BYTE PTR DS:[SI+2],'C'
- JE FIND_SOUND
- JMP PARM_ERROR
-
- FIND_SOUND: MOV SI,81H
- MOV CH,0
- MOV CL,BYTE PTR DS:[80H]
- FIND_SOUND_2: PUSH CX
- PUSH SI
- LEA DI,PARMS+4
- MOV CX,2
- REPZ CMPSB
- JE GOT_SOUND
- POP SI
- POP CX
- INC SI
- LOOP FIND_SOUND_2
- JMP FIND_SCAN
- GOT_SOUND: POP SI
- POP CX
- MOV SOUND_STATUS,'N'
- CMP BYTE PTR DS:[SI+2],'N'
- JE FIND_SCAN
- MOV SOUND_STATUS,'Y'
- CMP BYTE PTR DS:[SI+2],'Y'
- JE FIND_SCAN
- JMP PARM_ERROR
-
- FIND_SCAN: MOV SI,81H
- MOV CH,0
- MOV CL,BYTE PTR DS:[80H]
- FIND_SCAN_2: PUSH CX
- PUSH SI
- LEA DI,PARMS+2
- MOV CX,2
- REPZ CMPSB
- JE GOT_SCAN
- POP SI
- POP CX
- INC SI
- LOOP FIND_SCAN_2
- JMP FIND_KBFLAG
- GOT_SCAN: POP SI
- POP CX
- CALL HEX_BIN
- CMP AX,0FFFFH
- JNE SCAN_OKAY
- JMP PARM_ERROR
- SCAN_OKAY: MOV SCAN_CODE,AL
-
- FIND_KBFLAG: MOV SI,81H
- MOV CH,0
- MOV CL,BYTE PTR DS:[80H]
- FIND_KBFLAG_2: PUSH CX
- PUSH SI
- LEA DI,PARMS
- MOV CX,2
- REPZ CMPSB
- JE GOT_KBFLAG
- POP SI
- POP CX
- INC SI
- LOOP FIND_KBFLAG_2
- JMP FIND_ADDRESS
- GOT_KBFLAG: POP SI
- POP CX
- CALL HEX_BIN
- CMP AX,0FFFFH
- JNE KBFLAG_OKAY
- JMP PARM_ERROR
- KBFLAG_OKAY: MOV KBFLAG,AL
-
- FIND_ADDRESS: MOV SI,81H
- MOV CH,0
- MOV CL,BYTE PTR DS:[80H]
- FIND_ADDRESS_2: PUSH CX
- PUSH SI
- LEA DI,PARMS+10
- MOV CX,2
- REPZ CMPSB
- JE GOT_ADDRESS
- POP SI
- POP CX
- INC SI
- LOOP FIND_ADDRESS_2
- JMP PARMS_SET
- GOT_ADDRESS: POP SI
- POP CX
- MOV BX,OFFSET ASCIIZ
- ADD SI,2
- GA_005: MOV AL,DS:[SI]
- CMP AL,' '
- JE GA_010
- CMP AL,00H
- JE GA_010
- CMP AL,0DH
- JE GA_010
- MOV BYTE PTR DS:[BX],AL
- INC BX
- INC SI
- JMP GA_005
- GA_010: MOV AL,00H
- MOV BYTE PTR DS:[BX],AL
- MOV AH,3DH ;OPEN ADDRESS FILE
- MOV AL,00H
- LEA DX,ASCIIZ
- INT 21H
- CMP AX,2
- JE GA_035
- CMP AX,4
- JE GA_035
- CMP AX,12
- JE GA_035
- MOV DI,0
- MOV LINE,1
- MOV BX,AX
- LEA DX,RETURN_ADDRESS
- MOV ADDRESS_LOC,DX
- GA_015: MOV CX,1 ;READ A BYTE
- MOV AH,3FH
- INT 21H
- CMP AX,0
- JE GA_030
- CMP DI,132
- JA GA_030
- MOV SI,DX
- CMP BYTE PTR DS:[SI],0DH ;CARRIAGE RETURN
- JE GA_020
- CMP BYTE PTR DS:[SI],0AH ;LINE FEED
- JE GA_025
- INC DX
- INC DI
- JMP GA_015
- GA_020: MOV BYTE PTR DS:[SI],5FH ;BLANK CARRIAGE RETURN
- ADD ADDRESS_LOC,33
- MOV DX,ADDRESS_LOC
- INC LINE
- CMP LINE,5
- JE GA_030
- JMP GA_015
- GA_025: MOV BYTE PTR DS:[SI],5FH ;BLANK LINE FEED
- JMP GA_015
- GA_030: MOV AH,3EH ;CLOSE FILE
- INT 21H
- JMP PARMS_SET
- GA_035: JMP PARM_ERROR
-
- PARMS_SET: CMP COLOR_REQUEST,'C'
- JE CHECK_RUN_TYPE
-
- MOV COLOR_1,07H ;SET TO MONOCHROME
- MOV COLOR_2,0FH
- MOV COLOR_3,07H
- MOV COLOR_4,0FH
- MOV COLOR_5,07H
- MOV COLOR_6,0FH
- MOV COLOR_7,07H
- MOV COLOR_8,0FH
-
- CHECK_RUN_TYPE: CMP RESIDENT,'R' ;MAKE RESIDENT
- JE MAKE_RESIDENT
-
- BATCH_RUN: PUSH DS
- MOV AX,0
- PUSH AX
- JMP KBOARD_MATCH
-
- MAKE_RESIDENT: PUSH CS ;PROGRAM LOADER
- POP DS
- LEA SI,LOAD_FLAG ;SET FLAGS TO SEE IF
- MOV BYTE PTR DS:[SI],'╗' ;LOADED BEFORE
- MOV BYTE PTR DS:[SI+1],'╝'
- MOV BYTE PTR DS:[SI+2],'╜'
- MOV AX,0
-
- CHECK_LOADED: MOV ES,AX ;LOADED BEFORE ?
- LEA SI,LOAD_FLAG
- MOV DI,SI
- MOV CX,3
- REP CMPSB
- JE CHECK_EQUAL
- INC AX
- JMP SHORT CHECK_LOADED
-
- CHECK_EQUAL: MOV AX,ES ;IF ES AND DS SAME
- MOV BX,DS ;THEN NOT LOADED
- CMP AX,BX
- JE LOAD_IT
-
- LEA DX,ALREADY_MSG ;ALREADY RESIDENT
- MOV AH,09H
- INT 21H
- CALL BEEP
- RET
-
- LOAD_IT: LEA DX,INSTALL_MSG ;INSTALLATION MESSAGE
- MOV AH,09H
- INT 21H
-
- MOV AX,3509H ;GET OLD VECTOR ADDR
- INT 21H
- MOV WORD PTR CS:[KBOARD_VECTOR],BX
- MOV WORD PTR CS:[KBOARD_VECTOR+2],ES
-
- LEA DX,KBOARD_HANDLER ;SET NEW VECTOR
- MOV AX,2509H
- INT 21H
-
- MOV DX,OFFSET PROGRAM_END+1 ;LOAD & STAY
- INT 27H
-
- CODE ENDS
-
- END PROSET